package com.zmn.mcc.dubbo.interfaces.organize;

import com.zmn.common.dto.VtDTO;
import com.zmn.common.dto2.ResponseDTO;
import com.zmn.mcc.common.dto.organize.BsOrgDIO;
import com.zmn.mcc.common.dto.organize.BsOrgDRO;
import com.zmn.mcc.common.dto.organize.OrganizeDRO;

import java.util.List;

/**
 * @author tanbiao
 * @description:组织机构服务
 * @since 2020/6/24 9:49
 * @modifier
 **/
public interface OrganizeListRemoteService {

    /**
     * 根据Id获取数据
     *
     * @param orgId 父级ID
     * @return
     */
    ResponseDTO<OrganizeDRO> getByKey(Integer orgId);



    /**
     * 描述: 根据公司Id获取组织数据并且返回负责人相关信息(名称，电话)
     *
     * @param companyId
     * @return com.zmn.common.dto2.ResponseDTO<com.zmn.mcc.common.dto.organize.OrganizeDRO>
     * @author jiafei
     * @since 2021/9/3 15:54
     */
    ResponseDTO<OrganizeDRO> getByCompanyId(Integer companyId);

    /**
     * 根据组织层级和状态查询组织列表
     *
     * @param level  组织层级
     * @param status 状态
     * @return
     */
    ResponseDTO<List<OrganizeDRO>> listByLevel(Integer level, Integer status);

    /**
     * 根据平台、组织层级和状态查询组织列表
     *
     * @param plat  组织层级
     * @param level  组织层级
     * @param status 状态
     * @return
     */
    ResponseDTO<List<OrganizeDRO>> listByPlatAndLevel(Integer plat, Integer level, Integer status);

    /**
     * 根据平台、组织层级和状态查询Vt组织列表
     *
     * @param plat  组织层级
     * @param level  组织层级
     * @param status 状态
     * @return
     */
    ResponseDTO<List<VtDTO>> listVtByPlatAndLevel(Integer plat, Integer level, Integer status);

    /**
     * 根据平台、组织层级和状态查询Vt组织列表
     *
     * @param plat  组织层级
     * @param level  组织层级
     * @param status 状态
     * @param parentIdList parentId集合
     * @return
     */
    ResponseDTO<List<VtDTO>> listVtByPlatAndLevelAndParentIds(Integer plat, Integer level, Integer status, List<Integer> parentIdList);

    /**
     * 描述: 根据平台集合、组织层级和状态查询Vt组织列表
     *
     * @param plats        公寓
     * @param level        组织层级
     * @param status       状态
     * @param parentIdList parentId集合
     * @return {@link ResponseDTO }<{@link List }<{@link VtDTO }>>
     * @author chengguang
     * @since 2022/04/25
     */
    ResponseDTO<List<VtDTO>> listVtByPlatsAndLevelAndParentIds(List<Integer> plats, Integer level, Integer status, List<Integer> parentIdList);

    /**
     * 根据父组织查询直接下级组织
     *
     * @param parentId 父组织ID
     * @return
     */
    ResponseDTO<List<OrganizeDRO>> listByParentId(Integer parentId);

    /**
     * 根据父组织查询直接下级组织列表
     *
     * @param parentId 父组织ID
     * @param status 状态
     * @return
     */
    ResponseDTO<List<OrganizeDRO>> listByParentId(Integer parentId, Integer status);

    /**
     * 根据父组织查询直接下级组织Vt列表
     *
     * @param parentId 父组织ID
     * @param status 状态
     * @return
     */
    ResponseDTO<List<VtDTO>> listVtByParentId(Integer parentId, Integer status);

    /**
     * 根据组织ID集合查询组织列表
     *
     * @param orgIds 组织ID集合
     * @param status 状态
     * @return
     */
    ResponseDTO<List<OrganizeDRO>> listByOrgIds(List<Integer> orgIds, Integer status);

    /**
     * 根据组织ID查询组织信息
     *
     * @param orgIds 组织ID列表
     * @return
     */
    ResponseDTO<List<BsOrgDRO>> listBsOrgByOrgId(List<Integer> orgIds);

    /**
     * 北森系统组织信息更新
     *
     * @param list 北森组织信息列表
     * @return
     */
    ResponseDTO<String> saveBsOrgInfo(List<BsOrgDIO> list);
}
